//1.引入模块
var categoriesModel = require("../models/categoriesModel.js")
var postsModel = require("../models/postsModel.js")
var path1 = require("path")
var fs = require("fs")
var urlModel = require("url")

//2.向外暴露业务
module.exports = {
    showPostAddPage(req,res){ // 显示的写文章的页面
        // 开启验证session
        // if(!req.session.isLogin){
        //     res.redirect("/login")
        //     return
        // }
        //添加了验证是否登录的数据
        //在页面渲染的时候,发现需要渲染出分类信息,因此应该调用model层的方式来查询数据库中的分类数据
        categoriesModel.getAllCategoriesInfo((err,result)=>{
            if(err) return console.log(err.message)
            //渲染写文章页面
            res.render("post-add", { isLogin: req.session.isLogin, categories: result })
        })  
    },
    uploadFileOfPost(req, res) { // 写文章中的图片上传
        // console.log(req.file)
        //获取上传的图片数据
        var { path: pathTmp, filename, originalname} = req.file // 解构赋值
        //设置上传的目标路径
        var imgPath = path1.join(__dirname, "../uploads/") + filename + originalname
        // 读取临时存储中的数据
        fs.readFile(pathTmp,(err,data)=>{
            if(err) return res.json({
                "code":1,
                "msg":"读取失败"
            })
            //如果读取成功,需要把数据写入目标路径地址中
            fs.writeFile(imgPath, data,(err)=>{
                if(err) return res.json({
                    "code":1,
                    "msg":"上传失败"
                })
                //返回图片的路径
                var src = "/uploads/" + filename + originalname
                res.json({
                    "code":0,
                    "msg":"上传成功",
                    "src":src
                })
            })
        })
    },
    addNewPost(req,res){ // 添加新文章
        // console.log(req.body)
        //获取post方式传输的数据
        var post = req.body
        //添加两个补充数据
        post.category_id = post.category
        post.user_id = req.session.user.id //  user_id来源于登陆后的session中的数据
        //删除数据对象中的数据
        delete(post.category)

        //调用数据层方法写入文章数据
        postsModel.addNewPost(post,(err,isOK)=>{
            if (err) res.json({
                "code": 1,
                "msg": "添加文章失败"
            })

            if (isOK) {
                res.json({
                    "code": 0,
                    "msg": "添加文章成功"
                })
            }
        })
    },
    showPostsPage(req,res){ // 显示所有文章页
        res.render("posts",{isLogin:req.session.isLogin})
    },
    getPostsData(req,res){ // 获取所有文章的数据,设置显示10条一页
        //调用数据层的方法获取所有文章的数据
        postsModel.getPostsData((err,result)=>{
            if (err) res.json({
                "code": 1,
                "msg": "查询文章失败"
            })

            res.json({
                "code":0,
                "msg": "查询文章成功",
                "posts": result[0],   // 返回的数据为数据,拿到第一项的对象数据
                "totalCount": Math.ceil(result[1][0]["count"]/10) //获取总页数
            })
        })
    },
    getPostsDataByPage(req,res){ // 根据页码获取文章数据
        //获取传递过来的页码
        var page = urlModel.parse(req.url, true).query.page
        //调用数据层的方法获取当前页码数据
        postsModel.getPostsDataByPage(page, (err, result) => {
            if (err) res.json({
                "code": 1,
                "msg": "查询文章失败"
            })
            res.json({
                "code": 0,
                "msg": "查询文章成功",
                "posts": result
            })
        })
    },
    delPostsById(req, res) { // 删除文章数据
        // 接收传递过来的id，调用model层的方法删除文章
        var id = urlModel.parse(req.url, true).query.id;
        postsModel.delPostsById(id, (err, isOK) => {
            if (err) return res.json({
                "code": 1,
                "msg": "删除失败"
            })
            if (isOK) {
                res.json({
                    "code": 0,
                    "msg": "删除成功"
                })
            }
        })
    },
    //前端渲染
    // showPostsEditPage(req,res){ // 显示文章编辑页面
    //     res.render("postsEdit",{isLogin:req.session.isLogin})
    // },
    // getPostsInfoById(req, res) { // 根据id获取当前的文章数据
    //     //获取get方式传输的数据id
    //     var id = urlModel.parse(req.url, true).query.id;
    //     postsModel.getPostsInfoById(id,(err,result)=>{
    //         if (err) return res.json({
    //             "code": 1,
    //             "msg": "查询失败"
    //         })
    //         //查询成功
    //         res.json({
    //             "code": 0,
    //             "msg": "查询成功",
    //             "posts": result[0][0], // 为第一条sql语句查询的数据
    //             "categories": result[1] // 为第二条sql语句查询的数据
    //         })
    //     })
    // }

    // 后端渲染
    showPostsEditPage(req,res){
        // 接收传递的id数据,根据id查询显示对应的数据
        var id = urlModel.parse(req.url,true).query.id;
        // 调用数据层的方法查询数据
        postsModel.getPostsInfoById(id,(err,result)=>{
            if(err) return res.render("error",{}) // 渲染错误页面返回
            //读取数据成功
            // console.log(result); // 打印出来的数据为二维数据
            res.render("postsEdit",{
                isLogin:req.session.isLogin,
                posts: result[0][0], // 获取文章的数据
                categories: result[1] // 获取分类数据
            })
        })
    },
    uploadFileOfPostsEdit(req,res){
        // 获取post中multer模块中的数据
        var {path:pathTmp,filename,originalname} = req.file // 解构赋值
        //拼接图片目标存储路径
        var imgPath = path1.join(__dirname,"../uploads/")+filename+originalname;
        //读取临时存储multer模块中的图片数据
        fs.readFile(pathTmp,(err,data)=>{
            if(err) return res.json({
                "code":1,
                "msg": "读取失败"
            })
            // 读取数据成功,需要把数据写到目标路径中
            fs.writeFile(imgPath, data,(err)=>{
                if(err) return res.json({
                    "code":1,
                    "msg":"读取成功,上传失败"
                })
                // 上传图片成功,需要获取存储的路径返回前端页面
                var src = "/uploads/"+filename + originalname
                // console.log(src)
                res.json({
                    "code":0,
                    "msg":"上传成功",
                    "src": src  // 返回存储的图片路径
                })
            })
        })  
    },
    updatePostsInfoById(req,res){
        //获取post传输的数据
        var post = req.body  // 通过body-parser模块获取post传递的数据
        //调用数据层的方法更新数据
        postsModel.updatePostsInfoById(post,(err,isOK)=>{
            if(err) return res.json({
                "code":1,
                "msg": "更新失败"
            })
            if(isOK){
                res.json({
                    "code": 0,
                    "msg":"更新成功",
                })
            }
        })
    }

}